package com.collabscm.waf.util;

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.collections.map.MultiKeyMap;

/**
 * 系统中对日期进行的处理的统一工具类，包括对日期对象的格式化和字符串转化为日期对象，以及时间间隔计算等。
 * 注意：对于日期的展示可以按照不同的语言进行格式化显示。
 * @author Zeng Raoxing
 */
public class DateUtils {
	
	public static final int DATE = 1;
	public static final int TIME = 2;
	
	/**
	 * 其中：key1为类型，如：DATE, TIME
	 *      key2为语言
	 *      value为Format的实例
	 */
	private static MultiKeyMap formatMap = new MultiKeyMap();
	
	static {
		//设置中文日期格式
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		formatMap.put(DATE, I18nUtils.ZH_CN, format);
		//设置英文日期格式
		format = new SimpleDateFormat("MM/dd/yyyy");
		formatMap.put(DATE, I18nUtils.EN, format);
		//设置中文时间格式
		format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		formatMap.put(TIME, I18nUtils.ZH_CN, format);
		//设置英文时间格式
		format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
		formatMap.put(TIME, I18nUtils.EN, format);
	}
	
	/**
	 * 格式日期
	 * @param date 待格式化的Date对象
	 */
	public static String formatDate(Date date) {
		return formatDate(date, DATE);
	}
	
	/**
	 * 格式化时间
	 * @param date 待格式化的Date对象
	 */
	public static String formatTime(Date date) {
		return formatDate(date, TIME);
	}
	
	/**
	 * 格式化日期对象，注意：可以进行国际化处理。
	 * @param date 待格式化的Date对象
	 * @param type DATE或TIME等int型的常量
	 * @see formatDate或formatTime
	 */
	public static String formatDate(Date date, int type) {
		String lang = I18nUtils.getCurrentLanguage();
		Format format = (Format) formatMap.get(type, lang);
		return format.format(date);
	}
	
}
